1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.purple.certificate;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.glist;
34 import derelict.glib.gslist;
35 import derelict.glib.garray;
36 import core.stdc.time;
37 
38 extern (C):
39 
40 alias _Anonymous_0 PurpleCertificateVerificationStatus;
41 alias _PurpleCertificate PurpleCertificate;
42 alias _PurpleCertificatePool PurpleCertificatePool;
43 alias _PurpleCertificateScheme PurpleCertificateScheme;
44 alias _PurpleCertificateVerifier PurpleCertificateVerifier;
45 alias _PurpleCertificateVerificationRequest PurpleCertificateVerificationRequest;
46 alias void function (_Anonymous_0, void*) PurpleCertificateVerifiedCallback;
47 
48 enum _Anonymous_0
49 {
50 	PURPLE_CERTIFICATE_INVALID = 0,
51 	PURPLE_CERTIFICATE_VALID = 1
52 }
53 
54 struct _PurpleCertificate
55 {
56 	PurpleCertificateScheme* scheme;
57 	gpointer data;
58 }
59 
60 struct _PurpleCertificatePool
61 {
62 	gchar* scheme_name;
63 	gchar* name;
64 	gchar* fullname;
65 	gpointer data;
66 	gboolean function () init;
67 	void function () uninit;
68 	gboolean function (const(gchar)*) cert_in_pool;
69 	PurpleCertificate* function (const(gchar)*) get_cert;
70 	gboolean function (const(gchar)*, PurpleCertificate*) put_cert;
71 	gboolean function (const(gchar)*) delete_cert;
72 	GList* function () get_idlist;
73 	void function () _purple_reserved1;
74 	void function () _purple_reserved2;
75 	void function () _purple_reserved3;
76 	void function () _purple_reserved4;
77 }
78 
79 struct _PurpleCertificateScheme
80 {
81 	gchar* name;
82 	gchar* fullname;
83 	PurpleCertificate* function (const(gchar)*) import_certificate;
84 	gboolean function (const(gchar)*, PurpleCertificate*) export_certificate;
85 	PurpleCertificate* function (PurpleCertificate*) copy_certificate;
86 	void function (PurpleCertificate*) destroy_certificate;
87 	gboolean function (PurpleCertificate*, PurpleCertificate*) signed_by;
88 	GByteArray* function (PurpleCertificate*) get_fingerprint_sha1;
89 	gchar* function (PurpleCertificate*) get_unique_id;
90 	gchar* function (PurpleCertificate*) get_issuer_unique_id;
91 	gchar* function (PurpleCertificate*) get_subject_name;
92 	gboolean function (PurpleCertificate*, const(gchar)*) check_subject_name;
93 	gboolean function (PurpleCertificate*, time_t*, time_t*) get_times;
94 	GSList* function (const(gchar)*) import_certificates;
95 	void function () _purple_reserved1;
96 	void function () _purple_reserved2;
97 	void function () _purple_reserved3;
98 }
99 
100 struct _PurpleCertificateVerifier
101 {
102 	gchar* scheme_name;
103 	gchar* name;
104 	void function (PurpleCertificateVerificationRequest*) start_verification;
105 	void function (PurpleCertificateVerificationRequest*) destroy_request;
106 	void function () _purple_reserved1;
107 	void function () _purple_reserved2;
108 	void function () _purple_reserved3;
109 	void function () _purple_reserved4;
110 }
111 
112 struct _PurpleCertificateVerificationRequest
113 {
114 	PurpleCertificateVerifier* verifier;
115 	PurpleCertificateScheme* scheme;
116 	gchar* subject_name;
117 	GList* cert_chain;
118 	gpointer data;
119 	PurpleCertificateVerifiedCallback cb;
120 	gpointer cb_data;
121 }
122 
123 version(Derelict_Link_Static)
124 {
125     extern( C ) nothrow 
126     {
127         void purple_certificate_verify(PurpleCertificateVerifier* verifier, const(gchar)* subject_name, GList* cert_chain, PurpleCertificateVerifiedCallback cb, gpointer cb_data);
128         void purple_certificate_verify_complete(PurpleCertificateVerificationRequest* vrq, PurpleCertificateVerificationStatus st);
129         PurpleCertificate* purple_certificate_copy(PurpleCertificate* crt);
130         GList* purple_certificate_copy_list(GList* crt_list);
131         void purple_certificate_destroy(PurpleCertificate* crt);
132         void purple_certificate_destroy_list(GList* crt_list);
133         gboolean purple_certificate_signed_by(PurpleCertificate* crt, PurpleCertificate* issuer);
134         gboolean purple_certificate_check_signature_chain_with_failing(GList* chain, PurpleCertificate** failing);
135         gboolean purple_certificate_check_signature_chain(GList* chain);
136         PurpleCertificate* purple_certificate_import(PurpleCertificateScheme* scheme, const(gchar)* filename);
137         GSList* purple_certificates_import(PurpleCertificateScheme* scheme, const(gchar)* filename);
138         gboolean purple_certificate_export(const(gchar)* filename, PurpleCertificate* crt);
139         GByteArray* purple_certificate_get_fingerprint_sha1(PurpleCertificate* crt);
140         gchar* purple_certificate_get_unique_id(PurpleCertificate* crt);
141         gchar* purple_certificate_get_issuer_unique_id(PurpleCertificate* crt);
142         gchar* purple_certificate_get_subject_name(PurpleCertificate* crt);
143         gboolean purple_certificate_check_subject_name(PurpleCertificate* crt, const(gchar)* name);
144         gboolean purple_certificate_get_times(PurpleCertificate* crt, time_t* activation, time_t* expiration);
145         gchar* purple_certificate_pool_mkpath(PurpleCertificatePool* pool, const(gchar)* id);
146         gboolean purple_certificate_pool_usable(PurpleCertificatePool* pool);
147         PurpleCertificateScheme* purple_certificate_pool_get_scheme(PurpleCertificatePool* pool);
148         gboolean purple_certificate_pool_contains(PurpleCertificatePool* pool, const(gchar)* id);
149         PurpleCertificate* purple_certificate_pool_retrieve(PurpleCertificatePool* pool, const(gchar)* id);
150         gboolean purple_certificate_pool_store(PurpleCertificatePool* pool, const(gchar)* id, PurpleCertificate* crt);
151         gboolean purple_certificate_pool_delete(PurpleCertificatePool* pool, const(gchar)* id);
152         GList* purple_certificate_pool_get_idlist(PurpleCertificatePool* pool);
153         void purple_certificate_pool_destroy_idlist(GList* idlist);
154         void purple_certificate_init();
155         void purple_certificate_uninit();
156         gpointer purple_certificate_get_handle();
157         PurpleCertificateScheme* purple_certificate_find_scheme(const(gchar)* name);
158         GList* purple_certificate_get_schemes();
159         gboolean purple_certificate_register_scheme(PurpleCertificateScheme* scheme);
160         gboolean purple_certificate_unregister_scheme(PurpleCertificateScheme* scheme);
161         PurpleCertificateVerifier* purple_certificate_find_verifier(const(gchar)* scheme_name, const(gchar)* ver_name);
162         GList* purple_certificate_get_verifiers();
163         gboolean purple_certificate_register_verifier(PurpleCertificateVerifier* vr);
164         gboolean purple_certificate_unregister_verifier(PurpleCertificateVerifier* vr);
165         PurpleCertificatePool* purple_certificate_find_pool(const(gchar)* scheme_name, const(gchar)* pool_name);
166         GList* purple_certificate_get_pools();
167         gboolean purple_certificate_register_pool(PurpleCertificatePool* pool);
168         gboolean purple_certificate_unregister_pool(PurpleCertificatePool* pool);
169         void purple_certificate_display_x509(PurpleCertificate* crt);
170         void purple_certificate_add_ca_search_path(const(char)* path);
171     }
172 }
173 else
174 {
175     extern( C ) nothrow 
176     {
177         alias da_purple_certificate_verify = void function(PurpleCertificateVerifier* verifier, const(gchar)* subject_name, GList* cert_chain, PurpleCertificateVerifiedCallback cb, gpointer cb_data);				
178         alias da_purple_certificate_verify_complete = void function(PurpleCertificateVerificationRequest* vrq, PurpleCertificateVerificationStatus st);																
179         alias da_purple_certificate_copy = PurpleCertificate* function(PurpleCertificate* crt);																														
180         alias da_purple_certificate_copy_list = GList* function(GList* crt_list);																																	
181         alias da_purple_certificate_destroy = void function(PurpleCertificate* crt);																																
182         alias da_purple_certificate_destroy_list = void function(GList* crt_list);																																	
183         alias da_purple_certificate_signed_by = gboolean function(PurpleCertificate* crt, PurpleCertificate* issuer);																								
184         alias da_purple_certificate_check_signature_chain_with_failing = gboolean function(GList* chain, PurpleCertificate** failing);																				
185         alias da_purple_certificate_check_signature_chain = gboolean function(GList* chain);																														
186         alias da_purple_certificate_import = PurpleCertificate* function(PurpleCertificateScheme* scheme, const(gchar)* filename);																					
187         alias da_purple_certificates_import = GSList* function(PurpleCertificateScheme* scheme, const(gchar)* filename);																							
188         alias da_purple_certificate_export = gboolean function(const(gchar)* filename, PurpleCertificate* crt);																										
189         alias da_purple_certificate_get_fingerprint_sha1 = GByteArray* function(PurpleCertificate* crt);																											
190         alias da_purple_certificate_get_unique_id = gchar* function(PurpleCertificate* crt);																														
191         alias da_purple_certificate_get_issuer_unique_id = gchar* function(PurpleCertificate* crt);																													
192         alias da_purple_certificate_get_subject_name = gchar* function(PurpleCertificate* crt);																														
193         alias da_purple_certificate_check_subject_name = gboolean function(PurpleCertificate* crt, const(gchar)* name);																								
194         alias da_purple_certificate_get_times = gboolean function(PurpleCertificate* crt, time_t* activation, time_t* expiration);																					
195         alias da_purple_certificate_pool_mkpath = gchar* function(PurpleCertificatePool* pool, const(gchar)* id);																									
196         alias da_purple_certificate_pool_usable = gboolean function(PurpleCertificatePool* pool);																													
197         alias da_purple_certificate_pool_get_scheme = PurpleCertificateScheme* function(PurpleCertificatePool* pool);																								
198         alias da_purple_certificate_pool_contains = gboolean function(PurpleCertificatePool* pool, const(gchar)* id);																								
199         alias da_purple_certificate_pool_retrieve = PurpleCertificate* function(PurpleCertificatePool* pool, const(gchar)* id);																						
200         alias da_purple_certificate_pool_store = gboolean function(PurpleCertificatePool* pool, const(gchar)* id, PurpleCertificate* crt);																			
201         alias da_purple_certificate_pool_delete = gboolean function(PurpleCertificatePool* pool, const(gchar)* id);																									
202         alias da_purple_certificate_pool_get_idlist = GList* function(PurpleCertificatePool* pool);																													
203         alias da_purple_certificate_pool_destroy_idlist = void function(GList* idlist);																																
204         alias da_purple_certificate_init = void function();																																							
205         alias da_purple_certificate_uninit = void function();																																						
206         alias da_purple_certificate_get_handle = gpointer function();																																				
207         alias da_purple_certificate_find_scheme = PurpleCertificateScheme* function(const(gchar)* name);																											
208         alias da_purple_certificate_get_schemes = GList* function();																																				
209         alias da_purple_certificate_register_scheme = gboolean function(PurpleCertificateScheme* scheme);																											
210         alias da_purple_certificate_unregister_scheme = gboolean function(PurpleCertificateScheme* scheme);																											
211         alias da_purple_certificate_find_verifier = PurpleCertificateVerifier* function(const(gchar)* scheme_name, const(gchar)* ver_name);																			
212         alias da_purple_certificate_get_verifiers = GList* function();																																				
213         alias da_purple_certificate_register_verifier = gboolean function(PurpleCertificateVerifier* vr);																											
214         alias da_purple_certificate_unregister_verifier = gboolean function(PurpleCertificateVerifier* vr);																											
215         alias da_purple_certificate_find_pool = PurpleCertificatePool* function(const(gchar)* scheme_name, const(gchar)* pool_name);																				
216         alias da_purple_certificate_get_pools = GList* function();																																					
217         alias da_purple_certificate_register_pool = gboolean function(PurpleCertificatePool* pool);																													
218         alias da_purple_certificate_unregister_pool = gboolean function(PurpleCertificatePool* pool);																												
219         alias da_purple_certificate_display_x509 = void function(PurpleCertificate* crt);																															
220         alias da_purple_certificate_add_ca_search_path = void function(const(char)* path);		
221     }
222 
223     __gshared
224     {
225 	    da_purple_certificate_verify purple_certificate_verify;
226 	    da_purple_certificate_verify_complete purple_certificate_verify_complete;
227 	    da_purple_certificate_copy purple_certificate_copy;
228 	    da_purple_certificate_copy_list purple_certificate_copy_list;
229 	    da_purple_certificate_destroy purple_certificate_destroy;
230 	    da_purple_certificate_destroy_list purple_certificate_destroy_list;
231 	    da_purple_certificate_signed_by purple_certificate_signed_by;
232 	    da_purple_certificate_check_signature_chain_with_failing purple_certificate_check_signature_chain_with_failing;
233 	    da_purple_certificate_check_signature_chain purple_certificate_check_signature_chain;
234 	    da_purple_certificate_import purple_certificate_import;
235 	    da_purple_certificates_import purple_certificates_import;
236 	    da_purple_certificate_export purple_certificate_export;
237 	    da_purple_certificate_get_fingerprint_sha1 purple_certificate_get_fingerprint_sha1;
238 	    da_purple_certificate_get_unique_id purple_certificate_get_unique_id;
239 	    da_purple_certificate_get_issuer_unique_id purple_certificate_get_issuer_unique_id;
240 	    da_purple_certificate_get_subject_name purple_certificate_get_subject_name;
241 	    da_purple_certificate_check_subject_name purple_certificate_check_subject_name;
242 	    da_purple_certificate_get_times purple_certificate_get_times;
243 	    da_purple_certificate_pool_mkpath purple_certificate_pool_mkpath;
244 	    da_purple_certificate_pool_usable purple_certificate_pool_usable;
245 	    da_purple_certificate_pool_get_scheme purple_certificate_pool_get_scheme;
246 	    da_purple_certificate_pool_contains purple_certificate_pool_contains;
247 	    da_purple_certificate_pool_retrieve purple_certificate_pool_retrieve;
248 	    da_purple_certificate_pool_store purple_certificate_pool_store;
249 	    da_purple_certificate_pool_delete purple_certificate_pool_delete;
250 	    da_purple_certificate_pool_get_idlist purple_certificate_pool_get_idlist;
251 	    da_purple_certificate_pool_destroy_idlist purple_certificate_pool_destroy_idlist;
252 	    da_purple_certificate_init purple_certificate_init;
253 	    da_purple_certificate_uninit purple_certificate_uninit;
254 	    da_purple_certificate_get_handle purple_certificate_get_handle;
255 	    da_purple_certificate_find_scheme purple_certificate_find_scheme;
256 	    da_purple_certificate_get_schemes purple_certificate_get_schemes;
257 	    da_purple_certificate_register_scheme purple_certificate_register_scheme;
258 	    da_purple_certificate_unregister_scheme purple_certificate_unregister_scheme;
259 	    da_purple_certificate_find_verifier purple_certificate_find_verifier;
260 	    da_purple_certificate_get_verifiers purple_certificate_get_verifiers;
261 	    da_purple_certificate_register_verifier purple_certificate_register_verifier;
262 	    da_purple_certificate_unregister_verifier purple_certificate_unregister_verifier;
263 	    da_purple_certificate_find_pool purple_certificate_find_pool;
264 	    da_purple_certificate_get_pools purple_certificate_get_pools;
265 	    da_purple_certificate_register_pool purple_certificate_register_pool;
266 	    da_purple_certificate_unregister_pool purple_certificate_unregister_pool;
267 	    da_purple_certificate_display_x509 purple_certificate_display_x509;
268 	    da_purple_certificate_add_ca_search_path purple_certificate_add_ca_search_path;
269     }
270 }